﻿#define DEBUG
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Circus.Utility;
using Circus.Web;

namespace H5.FIO {

    /// <summary>
    /// 提供用户管理相关函数。
    /// </summary>
    public static class UserManager {

        private const string userSessionName = "Circus.Web.UserManager.currentUser";

        /// <summary>
        /// 获取当前已登录的用户。如果用户未登录则返回 null。
        /// </summary>
        public static User currentUser {
            get {
                return (User)HttpContext.Current.Session[userSessionName];
            }
            private set {
                HttpContext.Current.Session[userSessionName] = value;
            }
        }

        /// <summary>
        /// 用户登录。
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public static UserLoginResult login(string username, string password) {

            using (var reader = DbHelper.executeSqlReader("select * from [member] where username=@0 ", username)) {
                if (!reader.Read()) {
                    return UserLoginResult.userNotFound;
                }

                var pw = (string)reader["password"];

                if (Encryption.md5(password) != pw) {
                    return UserLoginResult.passwordError;
                }

                currentUser = new User() {
                    uid = (int)reader["uid"],
                    name = username,
                    email = (string)reader["email"]

                };

                return UserLoginResult.success;
            }
        }

        /// <summary>
        /// 判断当前用户是否已登录。
        /// </summary>
        public static bool isLogged {
            get {
                return currentUser != null;
            }
        }

        /// <summary>
        /// 用户注册。
        /// </summary>
        public static void register(string email, string password) {

        }

        /// <summary>
        /// 用户注销。
        /// </summary>
        public static void logout() {
            HttpContext.Current.Session.Remove(userSessionName);
        }

        /// <summary>
        /// 确认当前用户已登录。
        /// </summary>
        public static void checkLogin() {
            if (currentUser == null) {
#if DEBUG
                currentUser = new User() {
                    uid = -1,
                    name = "<测试账号>",
                    email = "<测试账号邮箱>"
                };
#else
                HttpHelper.jsonp(new {
                    ret = -1,
                    msg = "登录超时"
                });
                HttpContext.Current.Response.End();
#endif
            }
        }
    }

    /// <summary>
    /// 表示一个已登录的用户信息。
    /// </summary>
    public sealed class User {

        /// <summary>
        /// 获取当前用户的id。
        /// </summary>
        public int uid;

        /// <summary>
        /// 获取当前用户的名字。
        /// </summary>
        public string name;


        /// <summary>
        /// 获取当前用户的邮箱。
        /// </summary>
        public string email;

        ///// <summary>
        ///// 获取当前用户的角色。
        ///// </summary>
        //public UserRole role;

    }

    /// <summary>
    /// 表示用户角色。
    /// </summary>
    public enum UserRole {

        /// <summary>
        /// 普通用户。
        /// </summary>
        user,

        /// <summary>
        /// 网站编辑。
        /// </summary>
        editor,

        /// <summary>
        /// 管理员。
        /// </summary>
        admin,

    }

    /// <summary>
    /// 表示用户登录结果。
    /// </summary>
    public enum UserLoginResult {

        /// <summary>
        /// 登录成功。
        /// </summary>
        success,

        /// <summary>
        /// 用户名不存在。
        /// </summary>
        userNotFound,

        /// <summary>
        /// 密码错误。
        /// </summary>
        passwordError,

        /// <summary>
        /// 账号未激活。
        /// </summary>
        notAcitived,

        /// <summary>
        /// 账号被封锁。
        /// </summary>
        denied,

    }

}